#pragma once
#include"Common.h"

//因为所有线程对象共用一个CentralCache，
//所以设计成单例模式
class CentralCache
{
public:
	static CentralCache* GetInstance()
	{
		return _pInst;
	}

	//获取一个非空的span
	Span* GetOneSpan(SpanList& list, size_t size);

	//从中心缓存获取一定数量的对象给Thread Cache
	size_t FetchRangeObj(void*& start, void*& end, size_t batchNum, size_t size);

	// 将一定数量的对象释放到span跨度
	void ReleaseListToSpans(void* start, size_t size);


private:
	SpanList _spanLists[NFREELISTS];
private:
	//构造函数私有
	CentralCache()
	{}
	//禁止拷贝构造函数
	CentralCache(const CentralCache&) = delete;
	static CentralCache* _pInst;//声明
};